// EnableIf的通用性
// 通过定义这样一个通用的类型别名模板：
template <bool Condition, typename T = void>
using EnableIf = typename std::enable_if<Condition, T>::type;
// 可以：
// 1.应对不同的条件：可以在不同场景下使用不同的条件表达式，而不需要为每种条件创建单独的别名
// 2.减少重复代码：不需要为每种条件都写一遍完整的 typename std::enable_if<...>::type
// 3.提高代码可读性：使模板代码更简洁、更易于理解

// 使用示例
// 以下是如何在不同场景中使用同一个 EnableIf 的例子：
// 只接受整数类型
template <typename T>
EnableIf<std::is_integral<T>::value, void>
processInteger(T value)
{
    std::cout << "Processing integer: " << value << std::endl;
}

// 只接受浮点类型
template <typename T>
EnableIf<std::is_floating_point<T>::value, void>
processFloat(T value)
{
    std::cout << "Processing float: " << value << std::endl;
}

// 只接受指针类型
template <typename T>
EnableIf<std::is_pointer<T>::value, void>
processPointer(T value)
{
    std::cout << "Processing pointer" << std::endl;
}

// 只接受可默认构造的类型
template <typename T>
EnableIf<std::is_default_constructible<T>::value, T>
createDefault()
{
    return T();
}

// 组合多个条件
template <typename T>
EnableIf<std::is_integral<T>::value && !std::is_same<T, bool>::value, void>
processNonBoolInteger(T value)
{
    std::cout << "Processing non-bool integer: " << value << std::endl;
}